二分类Logistic回归:SPSS详细操作及模型预测
2016年12月23日,公众号推送了“SPSS实例教程:二分类Logistic回归”:在一项成组设计的病例对照研究中,探讨调整其他变量(性别、年龄、BMI、COPD病史)后,吸烟与肺癌发生之间的关系。
今天,我们推送一篇更为详细的二分类Logistic回归教程,本次的研究目的和上面那篇有所不同,有何不同呢,我们详细来看。
一、问题与数据
研究者想根据年龄、体重、性别和最大摄氧量(VO2max,一项身体健康指标)预测是否患心脏病。为此,研究者招募100名研究对象完成最大摄氧量试验,登记年龄、体重和性别,并评估研究对象目前是否患有心脏病。然后利用Logistic模型判断年龄(age)、体重(weight)、性别(gender)和最大摄氧量(VO2max)能否预测心脏病患病(heart_disease)情况。
部分数据如下图,变量caseno为每个研究对象的唯一编码。
二、对问题的分析
使用Logistic模型前,研究者需判断是否满足以下七个研究假设:
假设1:因变量即结局是二分类变量。
假设2:有至少1个自变量,自变量可以是连续变量,也可以是分类变量。
假设3:每条观测间相互独立。分类变量(包括因变量和自变量)的分类必须全面且每一个分类间互斥。
假设4:最小样本量要求为自变量数目的15倍,也有一些研究者认为样本量应达到自变量数目的50倍
假设5:连续的自变量与因变量的logit转换值之间存在线性关系。
假设6:自变量间不存在共线性。
假设7:没有明显的离群点、杠杆点和强影响点。
三、对假设的判断
假设1-4:取决于研究设计和数据类型,如果不满足则需要更换统计方法。
后3个假设则依赖于二分类Logistic回归是否适用于数据。
假设5: 连续的自变量与因变量的对数间存在线性关系。
在本例中,要求连续的自变量即年龄(age)、体重(weight)、最大摄氧量(VO2max)与因变量即心脏病的logit转换值之间存在线性关系。可以通过多种方法检验该线性关系,例如,用logitP和自变量画散点图,看是否存在线性关系;也可以通过Box-Tidwell方法,即将连续自变量与它们的自然对数值的交互作用项纳入回归方程中。
本文通过Box-Tidwell方法,发现所有连续自变量与因变量logit转换值之间存在线性关系。因为Box-Tidwell方法太过复杂,这里就不再详细介绍,有想详细了解的,可以和小咖(微信:xys2016ykf)联系,小咖把详细步骤发给你~。
如果一个及以上连续自变量与因变量的logit转换值间不存在线性关系,可以对其进行数据转换以满足线性假设,需注意以下几点:
1) 数据转换针对原始的连续自变量,如年龄(age)。
2) 只需转换不满足线性假设的连续自变量,不需要转换满足假设的连续变量和不需要线性假设的分类自变量。
3) 如果可以进行数据转换,需要重新检验是否存在线性关系。
如果采用以上方法仍不满足线性假设,则需要将该变量转换为有序分类变量。
假设6:自变量间不存在共线性。
假设7:没有明显的离群点、杠杆点和强影响点。
1. 该假设的SPSS操作可见后面第四大部分的操作,此处仅展示如何解读结果。结果中Casewise List表格显示学生化残差大于±2倍标准差的观测。学生化残差大于2.5倍标准差的观测,需要研究者进一步观察决定这些观测是否是离群点,如有必要甚至可以从分析中剔除这些观测。Casewise Diagnostics表格中展示这些信息,如下图:
注意1:如果所有观测的学生化残差小于±2倍标准差,SPSS不会输出上表。如果已经剔除离群点,则第一次分析得到的Casewise Diagnostics表格不会再显示。
注意2:可以通过各种残差如标准化残差、学生化残差或者学生化删除残差来检查离群点。在SPSS操作中勾选Casewise diagnostics选项时,SPSS默认使用学生化残差。
本例中,第70个观测(Case Number)的学生化残差为3.349,符合上述判断离群点的标准,如下图中红框显示:
注意:观测数(Case Number)指SPSS系统内自动编码(Data View窗口中最左侧蓝色一列中的编码),而非研究者赋值的编码。
研究者需要查看该观测为离群点的原因,决定是否删除该观测并报告。本例中则报告“纳入分析的观测中有一项观测学生化残差为3.349”。
根据SPSS分析结果,有两种情况:①如果没有离群点,则直接进入第五部分结果解读;②如果有离群点,研究者决定是否剔除这些观测或者对数据进行转换。如果剔除离群点,则需要对剔除后的数据重新进行回归分析。如果进行数据转换,则需要从线性假设重新开始分析。
四、SPSS操作
1. 在主菜单中点击Analyze > Regression > Binary Logistic…,如下图:
点击后出现Logistic Regression对话框,如下图:
2. 将因变量heart_disease选入Dependent框中,自变量age、weight、gender和VO2max选入Covariates框中,如下图:
注意:标准的Logistic回归过程中,应忽略Previous和Next键(用于有序Logistic回归)。Methods选项选择默认值,即“Enter”。如果目前未选择“Enter”,应修改为“Enter”。
3. 点击Categorical键,可显示Logistic Regression:Define Categorical Variables对话框,如下图:
注意:SPSS要求定义所有分类自变量。
4. 将Covariates分类自变量性别(gender)选入Categorical Covariates框中,如下图:
5. 在–Change Contrast–区域,将Reference Category从Last改为First,点击Change键,如下图:
注意:选择Last或First取决于数据。本例中以女性为对照组(赋值为0)将男性与女性对比,故选择First。
6. 点击Continue键,回到Logistic Regression对话框,可见分类自变量性别(gender)显示为“gender(Cat)”,如下图:
注意:分类自变量后显示“(Cat)”说明已正确定义分类变量。本例中性别(gender)显示“gender(Cat)”,说明已被定义为分类变量。
7. 点击Options键,显示出Logistic Regression:Options对话框,如下图:
8. 在-Statistics and Plots-区域,选中Classification plots,Hosmer-Lemeshow goodness-of-fit,Casewise listing of residuals和CI for exp(B)这4个选项。在-Display-区域,选中At last step选项,如下图:
9. 点击Continue键,即可返回Logistic Regression对话框。
10. 点击OK键,即可分析生成结果。
五、结果解释
二分类Logistic回归分析的结果有两个目的:①观察自变量对因变量的影响是否有统计学意义;②观察二分类Logistic回归模型预测因变量的效果。这两个目的可以通过下面的各部分结果反映。
1. Data coding(数据编码):检查变量和数据,包括以下3步。
(1) 检查是否存在缺失观测,纳入分析的观测数是否符合数据库中观测数一致。Case Processing Summary表格如下图:
(2) 确认因变量的编码是否正确。Dependent Variable Encoding表格如下图:
(3) 观察各个分类自变量是否存在某一类观测数过少的情况,此时不利于二分类Logistic回归分析。Categorical Variables Codings表格如下图:
2. Baseline analysis(基本分析):此部分结果的标题为“Block 0:Beginning Block”,为所有自变量不纳入模型、只包括常数项时的结果,可以与纳入所有自变量的模型的结果相比。
(1) Classification Table表格展示,没有任何自变量危险因素时,最好的情况是所有研究对象没有心脏病。如果做这个假设,只能将65%的研究对象正确分至没有心脏病一类(Overall Percentage一行)。
(2) Variables in the Equation表格展示只有常数项纳入模型的结果。
(3) Variables not in the Equation表格展示没纳入模型的自变量。
3. Binomial logistic regression results(二分类Logistic回归结果)
(1) 模型拟合:Omnibus Tests of Model Coefficients展示该模型的统计学意义(与不纳入任何自变量的模型相比),如下图:
二分类Logistic回归中需观察Model一行。从上表中可观察到模型有统计学意义(P<0.001,Sig.一列)。
另一种方法是Hosmer and Lemeshow goodness of fit test检验评价模型预测因变量的能力,如下图:
如果该模型检验结果有统计学意义则提示模型拟合较差。本例中Hosmer and Lemeshow goodness of fit test检验没有统计学意义(P=0.871),提示模型拟合良好。
(2) 方差解释:为了解因变量的变异能够被拟合的模型解释的比例,可以查看Model Summary表格。
该表格包含Cox & Snell R Square和Nagelkerke R Square,这两种方法都可以解释因变量的变异(与多元回归分析计算方法略有不同)。这两种R2有时被称为伪R2,在多元回归分析中伪R2小于R2。这些伪R2与R2解释的方法相同,但需要更谨慎。
因此,本研究中因变量可被解释的变异比例在24.0-33.0%间,具体数值取决于Cox & Snell R2和Nagelkerke R2。Nagelkerke R2在Cox & Snell R2基础上改进,但Cox & Snell R2不能达到1(其中Cox&snell R2计算公式:R2C&S = 1 – (L0 / LM)2/n,L0是没有自变量时的似然函数值,LM是有自变量时的似然函数值,n是样本量)。因此,最好报告Nagelkerke R2。
4. Category prediction(模型预测)
二分类Logistic回归估计事件(本例中为患心脏病)发生的可能性。如果事件发生的可能性大于或等于0.5,SPSS判断为事件发生(本例中为患心脏病);如果可能性小于0.5,则判断为事件未发生(本例中为未患心脏病)。
研究者常对自变量使用Logistic回归来分类或预测观测的结局。因此,与真实情况相比,预测效果的有效性有必要评价。根据研究不同类型有很多方法评价这种有效性,这些方法都围绕观测和预测的分类,结果在Classification Table可见,如下图:
首先,需注意该表下方的说明“界值为0.5”,表明如果观测被分类至“是”这一类的概率大于0.5,则该观测会被分类至“是”这一类,否则被分类至“否”这一类。
SPSS结果中第一个Classification Table显示,不考虑自变量、假设所有观测“没有”心脏病时,模型能够将65.0%的观测能够正确分类。当纳入自变量时,模型能够将71.0%的观测正确分类(查看Overall Percentage一行),即纳入这些自变量能够能够提高预测能力。该指标常被称作percentage accuracy in classification(正确分类百分比)。
第二个指标是敏感度,因变量分类(或预测)为“是”的观测数占实际为“是”的观测数的比例。本例中,45.7%患有心脏病的研究对象被模型预测患有心脏病(请查看“Percentage Correct”列中实际观测的“Yes”一行)。
特异度是指因变量分类(或预测)为“否”的观测数占实际为“否”的观测数的比例。本例中,84.6%未患心脏病的研究对象被模型预测未患心脏病(请查看“Percentage Correct”列中实际观测的“No”一行)。
阳性预测值是指预测与实际均为“是”的观测数占所有预测为“是”的观测数的比例。本例中,该值为100*(16÷(10+16))=61.5%,即预测患有心脏病的观测中有61.5%预测正确。
阴性预测值是指预测与实际均为“否”的观测数占所有预测为“否”的观测数的比例。本例中,该值为100*(55÷(55+19))=74.3%,即预测未患心脏病的观测中有74.3%预测正确。
5. Variables in the equation(方程中的自变量)
Variables in the equation表格中展示了每个自变量的贡献及其统计学意义,如下图:
Wald检验(“Wald”一列)用于检验每个自变量是否有统计学意义,结果在“Sig”一列查看。上表结果中可以看到,模型同时纳入age(P=0.003),gender(P=0.021)和VO2max(P=0.039)有统计学意义,但同时纳入weight(P=0.799)没有统计学意义。
系数B(“B”一列)用于预测事件(因变量)发生的概率,代表在其他自变量为常数时自变量每变化一个单位,比值比(事件发生概率与不发生概率的比值)的log值的变化。
例如,本例中与女性(赋值为0)相比男性(赋值为1)患心脏病比值的log值变化为1.950。但用系数B解释结果的不够直观,SPSS结果在“Exp(B)”一列中提供每个自变量的比值比,后面两列是置信区间(95%C.I. for EXP(B))。
“Exp(B)”大于1代表自变量每增加一个单位发生结局的风险是不增加时的倍数。本例中,男性患心脏病的风险是女性的7.03倍。Exp(B)小于1.0则提示自变量每增加一个单位发生结局的风险是不增加时的倍数。
有时为了解释方便,可以将比值比倒置(如对VO2max,1/0.906=1.10)。此时可解释为自变量每减小一个单位发生结局的风险是不减小时的倍数,如VO2max减少一个单位,患心脏病风险是不减小时的1.10倍,即风险增加了10%。如果采用这种表述方式,置信区间也应该相应地倒置。
六、撰写结论
1. 简要汇报
本研究采用二分类Logistic回归评估年龄、体重、性别和最大摄氧量对研究对象患心脏病的影响。最终,得到的Logistic模型具有统计学意义,χ2(4)=27.402,P <0.0005。该模型解释了患心脏病与否的33.0%变异(Nagelkerke R2)并能够正确分类71.5%的研究对象。模型的敏感度为45.7%,特异度为84.6%,阳性预测值为61.5%,阴性预测值为74.3%。
模型纳入的五个自变量(或预测因素)中年龄、性别和最大摄氧量这三个变量有统计学意义(见表1)。男性患心脏病的风险是女性的7.03倍。年龄每增加一岁,患心脏病的风险增加9%;最大摄氧量每增加一个单位,患心脏病的风险降低9%。
2. 详细汇报
本研究采用二分类Logistic回归评估年龄、体重、性别和最大摄氧量对研究对象患心脏病的影响。
使用Box-Tidwell方法检验连续自变量与因变量logit转换值间是否为线性,线性检验结果得到所有连续自变量与因变量logit转换值间存在线性关系。一个观测的学生化残差为标准差的3.349倍,但保留在分析中。
最终,得到的Logistic模型具有统计学意义,χ2(4)=27.402,P <0.0005。该模型解释了患心脏病与否的33.0%变异(Nagelkerke R2)并能够正确分类71.5%的研究对象。模型的敏感度为45.7%,特异度为84.6%,阳性预测值为61.5%,阴性预测值为74.3%。
模型纳入的五个自变量(或预测因素)中年龄、性别和最大摄氧量这三个变量有统计学意义(见表1)。男性患心脏病的风险是女性的7.02倍。年龄每增加一个岁,患心脏病的风险增加9%;最大摄氧量每增加一个单位,患心脏病的风险降低9%。
更多阅读
赶快关注医咖会吧!
有临床研究设计或统计学方面的难题?快加小咖个人微信(xys2016ykf),加入医咖会统计讨论群,和小伙伴们一起交流学习吧。
点击左下角“阅读原文”,看看医咖会既往推送了哪些统计方法的文章。